#ifndef ENVIRONMENT_H_
#define ENVIRONMENT_H_

#include "../Crossover/Crossover.h"
#include "../Solution/Solution.h"
#include <string>

/** Base class for environments.  An environment is a class that handles the
 * fitness functions and determines what the problem genetic algorithm will actually be
 * solving.
 */
class Environment
{
	public:
		virtual Crossover* configureCrossover() = 0;                         /**< Abstract function for returning an appropriate crossover */
        virtual void configure() = 0;                                        /**< Abstract configure function                              */
        virtual void configure(string) = 0;                                  /**< Abstract configure from a file function                  */
		virtual double evaluateFitness(Solution*) = 0;                       /**< Abstract evaluate fitness function                       */
		virtual void generateRandomPopulation(vector<Solution*> &, unsigned int) = 0; /**< Abstract function for generating a random population     */
        virtual string formatSolution(Solution*);                            /**< Generic function for outputing a solution                */
        
        static string getName();                                            /**< Returns the name of the environment.                     */
};

#endif /*ENVIRONMENT_H_*/
